<?php
//定义token
define('TOKEN','duowan');
function signature(){
	//获取微信服务器的get请求参数
	$signature=$_GET['signature'];//微信加密签名
	$timestamp=$_GET['timestamp'];//时间戳
	$nonce=$_GET['nonce'];//随机数
	// $echostr=$_GET['echostr'];//随机字符串

	//将$nonce $timestamp TOKEN 放在数组里 
	$stempArr=array($nonce,$timestamp,TOKEN);
	//排序  SORT_STRING (快速排序)
	sort($stempArr,SORT_STRING);
	//把数组转换为字符串
	$stempStr=implode($stempArr);
	//进行sha1加密
	$stempStr=sha1($stempStr);
	//进行校验->确认请求是来自微信服务器 而不是恶意第三方
	if($stempStr==$signature){
		// echo $echostr;
		return true;
	}else{
		return error;
	}
}

//进行校验
if(signature()){
	$echostr=$_GET['echostr'];//随机字符串
	if($echostr){
		echo $echostr;
		exit();
	}
}

//接收微信服务器传递过来消息(xml消息格式)
$postData=$HTTP_RAW_POST_DATA;
//判断
if(!$postData){
	echo "error";
	exit();
}
//解析xml消息格式 (把xml字符串转换为 object)
$object=simplexml_load_string($postData,"SimpleXMLElement",LIBXML_NOCDATA);
//获取发送方
$FromUserName=$object->FromUserName;
//获取接收方
$ToUserName=$object->ToUserName;
//获取发送方发来的消息格式
$MsgType=$object->MsgType;
//switch
switch($MsgType){
	case "event":
		//获取事件操作
		$Event=$object->Event;
		//switch
		switch($Event){
			//关注事件
			case "subscribe":
				//作为回复的消息
				$replyMsg="欢迎来到一众帮平台,请回复1查看个人微博地址,回复2查看消息";
				$replyXml="
				<xml>
					<ToUserName><![CDATA[%s]]></ToUserName>
					<FromUserName><![CDATA[%s]]></FromUserName>
					<CreateTime>%s</CreateTime>
					<MsgType><![CDATA[text]]></MsgType>
	 				<Content><![CDATA[%s]]></Content>					
				</xml>
				";
				break;
				//取消关注
				case "unsubscribe":
					$replyMsg="很舍不得你,欢迎下次再关注我!";
					$replyXml="
					<xml>
						<ToUserName><![CDATA[%s]]></ToUserName>
						<FromUserName><![CDATA[%s]]></FromUserName>
						<CreateTime>%s</CreateTime>
						<MsgType><![CDATA[text]]></MsgType>
		 				<Content><![CDATA[%s]]></Content>					
					</xml>
					";
					break;
		}
	//判断消息类型
	// case 'text':
	// 	//获取用户发来的文本消息 (再把获取到的文本消息 以原有的数据返回去)
	// 	$replyMsg=$object->Content;
	// 	$replyXml="
	// 	<xml>
	//  	<ToUserName><![CDATA[%s]]></ToUserName>
	//  	<FromUserName><![CDATA[%s]]></FromUserName>
	//  	<CreateTime>%s</CreateTime>
	//  	<MsgType><![CDATA[text]]></MsgType>
	//  	<Content><![CDATA[%s]]></Content>
 // 		</xml>";
	// 	break;
		//被动回复图文消息
		case 'text':
			if($object->Content=='1'){
				//封装图文消息
				$dataArray=array(
						array(
							"Title"=>"哈哈噢",
							"Description"=>"this is a test",
							"PicUrl"=>"http://img12.360buyimg.com/vclist/jfs/t3127/164/515546215/18561/11a79d2f/57b9c821Nf76725bf.jpg",
							"Url"=>"http://weibo.com/u/6016383771/home?leftnav=1"
							),
						array(
							"Title"=>"上淘宝",
							"Description"=>"this is a test",
							"PicUrl"=>"https://img.alicdn.com/tps/TB1eREfLVXXXXaHXFXXXXXXXXXX-480-260.png",
							"Url"=>"http://www.baidu.com"
							),
					);
				$itemstr='';
				//遍历图文消息
				foreach($dataArray as $key=>$value){
					$itemstr .= "<item>
					<Title><![CDATA[".$value['Title']."]]></Title> 
					<Description><![CDATA[".$value['Description']."]]></Description>
					<PicUrl><![CDATA[".$value['PicUrl']."]]></PicUrl>
					<Url><![CDATA[".$value['Url']."]]></Url>
				</item>
					";
				}

				//获取消息
				$replyMsg="smsmsm";
				$replyXml="<xml>
						<ToUserName><![CDATA[%s]]></ToUserName>
						<FromUserName><![CDATA[%s]]></FromUserName>
						<CreateTime>%s</CreateTime>
						<MsgType><![CDATA[news]]></MsgType>
						<ArticleCount>".count($dataArray)."</ArticleCount>
						<Articles>".$itemstr."</Articles>
					</xml>";
			}else if($object->Content=='2'){
				//封装图文消息
				$dataArray=array(
						array(
							"Title"=>"哈哈噢",
							"Description"=>"this is a test",
							"PicUrl"=>"http://img12.360buyimg.com/vclist/jfs/t3127/164/515546215/18561/11a79d2f/57b9c821Nf76725bf.jpg",
							"Url"=>"http://weibo.com/u/6016383771/home?leftnav=1"
							),
						array(
							"Title"=>"上淘宝",
							"Description"=>"this is a test",
							"PicUrl"=>"https://img.alicdn.com/tps/TB1eREfLVXXXXaHXFXXXXXXXXXX-480-260.png",
							"Url"=>"http://www.baidu.com"
							),
					);
				$itemstr='';
				//遍历图文消息
				foreach($dataArray as $key=>$value){
					$itemstr .="<item>
						<Title><![CDATA[".$value['Title']."]]></Title> 
						<Description><![CDATA[".$value['Description']."]]></Description>
						<PicUrl><![CDATA[".$value['PicUrl']."]]></PicUrl>
						<Url><![CDATA[".$value['Url']."]]></Url>
					</item>";
				}
				//获取消息
				$replyMsg="smsmsm";
				$replyXml="<xml>
					<ToUserName><![CDATA[%s]]></ToUserName>
					<FromUserName><![CDATA[%s]]></FromUserName>
					<CreateTime>%s</CreateTime>
					<MsgType><![CDATA[news]]></MsgType>
					<ArticleCount>".count($dataArray)."</ArticleCount>
					<Articles>".$itemstr."</Articles>
				</xml>";

			}else{

			}
			break;
		case 'image':
			//获取用户发来的图片消息 再把获取到的图片消息作为回复的消息
			$replyMsg=$object->MediaId;
			$replyXml="
			<xml>
			 	<ToUserName><![CDATA[%s]]></ToUserName>
			 	<FromUserName><![CDATA[%s]]></FromUserName>
			 	<CreateTime>%s</CreateTime>
			 	<MsgType><![CDATA[image]]></MsgType>
			 	<Image>
			 	<MediaId>%s</MediaId>
			 	</Image>
		 	</xml>";			
			break;
}
//对消息模板中的通配符 进行模板替换
$result=sprintf($replyXml,$FromUserName,$ToUserName,time(),$replyMsg);
echo $result;
